const BigInteger = require("./dataStruct/BigInteger").BigInteger;
const common = require('./base/common');

/**
 * 兴业银行的笔试题并讨论了一些扩展的情况
 * 
 * @param {*} num1 数字1
 * @param {*} num2 数字2
 * @returns 相乘
 */
console.log("乘法");
common.testing([
    ["0", "0"],
    ["11", "11"],
    ["90", "90"],
    ["100", "1000"],
    ["88", "88"],
    ["99", "98"],
    ["1816541415462345345165145143132534625151414613241", "1231791034901349185019248195000124"],
    ["-50000000000000","-800000000000000000000000000000000000000000000000000000000000000000000"],
    ["1121212121", "---183928473619283694816000291384618273821"]
], common.SKIP)(x => BigInteger.valueOf(x[0]).multi(BigInteger.valueOf(x[1])));

console.log("加法");
common.testing([
    ["1", "1"],
    ["55", "66"],
    ["17", "23"],
    ["-5", "-8"],
    ["-23", "14"],
    ["-3", "-0"],
    ["24", "-15"],
    ["11", "-9"],
    ["1", "-9"],
    ["111111111111111111113", "-111111112111111111114"],
    ["111121111111111111113", "-111111111111111111114"],
    ["123456789112233445566778899111222333444555", "-2143859312211443388227744881199222111333"],
    ["10000000000000000000000000000000", "-19"],
    ["871230000000000003212349000000000012314775812000000000123475612000000000341222", "-12649192871924619239123761927387123918623871237233333333333333"]
], common.SKIP)(x => BigInteger.valueOf(x[0]).add(BigInteger.valueOf(x[1])));

console.log("比较");
common.testing([
    ["1", "1"],
    ["1", "-1"],
    ["-1", "1"],
    ["-12767", "-157369"],
    ["2333333333333333333333333333333333331", "2333333333333333333333333333333333332"],
    ["1923019230192143281948102348103241203957120", "1875190324177132612349182734361934717129352"],
    [BigInteger.valueOf("200").pow(199).toString(), BigInteger.valueOf("199").pow(200).toString()]
], common.SKIP)(x => BigInteger.valueOf(x[0]).compare(BigInteger.valueOf(x[1])));

console.log("指数");
common.testing([
    ["9", 2],
    ["0", 2],
    ["2233413414134", 1],
    ["231231", 0],
    ["200", 199],
    ["199", 200]
], common.SKIP)(x => BigInteger.valueOf(x[0]).pow(x[1]));

console.log("计算 60!");
let x = BigInteger.valueOf(1);
for(let i=BigInteger.valueOf(1), 
        len=BigInteger.valueOf(60), 
        adder = BigInteger.valueOf(1); 
        i.compare(len) <= 0; 
        i = i.add(adder)) {
    x = x.multi(BigInteger.valueOf(i));
}
console.log(x.toString());
